package mx.ipn.persistencia.mysql;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Date;
import java.sql.Time;
import java.util.ArrayList;

import mx.ipn.persistencia.FabricaDeDAOs;
import mx.ipn.persistencia.dao.BitacoraServicioDAO;
import mx.ipn.persistencia.dao.UsuarioDAO;
import mx.ipn.persistencia.dao.FormaPagoDAO;
import mx.ipn.persistencia.dao.ClienteDAO;
import mx.ipn.persistencia.dao.ClienteDireccionDAO;
import mx.ipn.persistencia.dao.DireccionDAO;
import mx.ipn.persistencia.dao.StatusDAO;
import mx.ipn.persistencia.dao.BitacoraChoferUnidadDAO;
import mx.ipn.persistencia.dao.TipoServicioDAO;
import mx.ipn.to.BitacoraServicioTO;
import mx.ipn.to.UsuarioTO;
import mx.ipn.to.FormaPagoTO;
import mx.ipn.to.ClienteTO;
import mx.ipn.to.ClienteDireccionTO;
import mx.ipn.to.DireccionTO;
import mx.ipn.to.StatusTO;
import mx.ipn.to.BitacoraChoferUnidadTO;
import mx.ipn.to.TipoServicioTO;
import mx.ipn.to.FechaHoraTO;

public class BitacoraServicioDAOMySQL implements BitacoraServicioDAO {
	static{FabricaDeDAOsMySQL.iniciaLog(BitacoraServicioDAOMySQL.class);}
	
	private static boolean needsUpdate = true;
	private static ArrayList<BitacoraServicioTO> bitacoraServicioDia = null;
	
	private static final String INSERT = "INSERT INTO  bitacora_servicio ("
			+ "fecha_entrada,"
			+ "hora_entrada,"
			+ "tiempo,"
			+ "fecha_captura,"
			+ "hora_captura,"
			+ "fecha_asignacion,"
			+ "hora_asignacion,"
			+ "fecha_cubierto,"
			+ "hora_cubierto,"
			+ "observaciones,"
			+ "telefono,"
			+ "factura,"
			+ "costo_estimado,"
			+ "id_usuario_telefonista,"
			+ "id_usuario_operadora,"
			+ "id_forma_pago,"
			+ "id_cliente,"
			+ "id_direccion_destino,"
			+ "id_cliente_direccion,"
			+ "id_status,"
			+ "id_operacion_chof_uni,"
			+ "id_tipo_servicio) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

	private static final String UPDATE = "UPDATE  bitacora_servicio SET "
			+ "fecha_entrada=?,hora_entrada=?,tiempo=?,fecha_captura=?,hora_captura=?,fecha_asignacion=?,hora_asignacion=?,fecha_cubierto=?,"
			+ "hora_cubierto=?,observaciones=?,telefono=?,factura=?,costo_estimado=?,id_usuario_telefonista=?,"
			+ "id_usuario_operadora=?,id_forma_pago=?,id_cliente=?,id_direccion_destino=?,id_cliente_direccion=?,"
			+ "id_status=?,id_operacion_chof_uni=?,id_tipo_servicio=? WHERE id_operacion=?";

	private static final String FINDBYIDOPERACION = "SELECT * FROM  bitacora_servicio WHERE id_operacion=?";

	private static final String SELECT = "SELECT * FROM  bitacora_servicio";
	private static final String SELECTBYDIA = "SELECT * FROM  bitacora_servicio WHERE fecha_captura=?";
	private static final String SELECTBYRANGOFECHAHORA = "SELECT * FROM  bitacora_servicio WHERE fecha_captura>=? AND fecha_captura<=? AND hora_captura>=? AND hora_captura<=?";
	private static final String SELECTBYRANGOFECHAHORAFACTURA = "SELECT * FROM  bitacora_servicio WHERE fecha_captura>=? AND fecha_captura<=? AND hora_captura>=? AND "
			+ "hora_captura<=? AND factura=?";
	private static final String SELECTBYRANGOFECHAHORATELEFONO = "SELECT * FROM  bitacora_servicio WHERE fecha_captura>=? AND fecha_captura<=? AND hora_captura>=? AND "
			+ "hora_captura<=? AND telefono=?";

	private static final String SELECTBYRANGOFECHAHORACLIENTE = "SELECT * FROM  bitacora_servicio WHERE fecha_captura>=? AND fecha_captura<=? AND hora_captura>=? "
			+ " AND hora_captura<=? AND id_cliente=?";
	private static final String SELECTBYRANGOFECHAHORAFORMAPAGO = "SELECT * FROM  bitacora_servicio WHERE fecha_captura>=? AND fecha_captura<=? AND hora_captura>=? "
			+ "AND hora_captura<=? AND id_forma_pago=?";
	private static final String SELECTBYRANGOFECHAHORATELEFONISTA = "SELECT * FROM  bitacora_servicio WHERE fecha_captura>=? AND fecha_captura<=? AND hora_captura>=? "
			+ " AND hora_captura<=? AND id_usuario_telefonista=?";
	private static final String SELECTBYRANGOFECHAHORAOPERADORA = "SELECT * FROM  bitacora_servicio WHERE fecha_captura>=? AND fecha_captura<=? AND hora_captura>=? "
			+ " AND hora_captura<=? AND id_usuario_operadora=?";
	private static final String SELECTBYRANGOFECHAHORATIEMPO = "SELECT * FROM  bitacora_servicio WHERE fecha_captura>=? AND fecha_captura<=? AND hora_captura>=? AND hora_captura<=? AND tiempo>=? AND tiempo<=?";

	private static final String SELECTBYRANGOFECHAHORARANGOUNIDAD = "SELECT bb.id_operacion, bb.fecha_entrada,"
			+ "bb.hora_entrada, bb.tiempo, bb.fecha_captura,"
			+ "bb.hora_captura, bb.fecha_asignacion, bb.hora_asignacion, bb.fecha_cubierto,"
			+ "bb.hora_cubierto, bb.observaciones,bb.telefono, bb.factura, bb.costo_estimado, bb.id_usuario_telefonista,"
			+ "bb.id_usuario_operadora, bb.id_forma_pago, bb.id_cliente, bb.id_direccion_destino,"
			+ "bb.id_cliente_direccion, bb.id_status, bb.id_operacion_chof_uni, bb.id_tipo_servicio,bcu.id_unidad"
			+ " FROM bitacora_servicio bb, bitacora_chofer_unidad bcu WHERE bcu.id_operacion = bb.id_operacion_chof_uni AND"
			+ " bb.fecha_captura>=? AND bb.fecha_captura<=? AND bb.hora_captura>=? AND bb.hora_captura<=? AND"
			+ " bcu.id_unidad>=? AND bcu.id_unidad<=?";

	private static final String SELECTBYRANGOFECHAHORARANGOUNIDADSTATUS = "SELECT bb.id_operacion, bb.fecha_entrada,"
			+ "bb.hora_entrada, bb.tiempo, bb.fecha_captura,"
			+ "bb.hora_captura, bb.fecha_asignacion, bb.hora_asignacion, bb.fecha_cubierto,"
			+ "bb.hora_cubierto, bb.observaciones,bb.telefono, bb.factura, bb.costo_estimado, bb.id_usuario_telefonista,"
			+ "bb.id_usuario_operadora, bb.id_forma_pago, bb.id_cliente, bb.id_direccion_destino,"
			+ "bb.id_cliente_direccion, bb.id_status, bb.id_operacion_chof_uni, bb.id_tipo_servicio,bcu.id_unidad"
			+ " FROM bitacora_servicio bb, bitacora_chofer_unidad bcu WHERE bcu.id_operacion = bb.id_operacion_chof_uni AND"
			+ " bb.fecha_captura>=? AND bb.fecha_captura<=? AND bb.hora_captura>=? AND bb.hora_captura<=? AND"
			+ " bcu.id_unidad>=? AND bcu.id_unidad<=? AND bb.id_status=?";

	private static final String SELECTBYRANGOFECHAHORARANGOUNIDADSTATUSTIPOSERVICIO = "SELECT bb.id_operacion, bb.fecha_entrada,"
			+ "bb.hora_entrada, bb.tiempo, bb.fecha_captura,"
			+ "bb.hora_captura, bb.fecha_asignacion, bb.hora_asignacion, bb.fecha_cubierto,"
			+ "bb.hora_cubierto, bb.observaciones,bb.telefono, bb.factura, bb.costo_estimado, bb.id_usuario_telefonista,"
			+ "bb.id_usuario_operadora, bb.id_forma_pago, bb.id_cliente, bb.id_direccion_destino,"
			+ "bb.id_cliente_direccion, bb.id_status, bb.id_operacion_chof_uni, bb.id_tipo_servicio,bcu.id_unidad"
			+ " FROM bitacora_servicio bb, bitacora_chofer_unidad bcu WHERE bcu.id_operacion = bb.id_operacion_chof_uni AND"
			+ " bb.fecha_captura>=? AND bb.fecha_captura<=? AND bb.hora_captura>=? AND bb.hora_captura<=? AND"
			+ " bcu.id_unidad>=? AND bcu.id_unidad<=? AND bb.id_status=? AND bb.id_tipo_servicio=?";

	@Override
	public BitacoraServicioTO findBitacoraServicioById(int idOperacion) {
		System.out.println("find id: " + idOperacion);
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(FINDBYIDOPERACION);
			ps.setInt(1, idOperacion);
			ResultSet rs = ps.executeQuery();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			BitacoraServicioTO bitacoraServicioTO = null;
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			if (rs.next()) {

				

				usuarioDAO = fabricaMySQL.getUsuarioDAO();
				formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
				clienteDAO = fabricaMySQL.getClienteDAO();
				clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
				direccionDAO = fabricaMySQL.getDireccionDAO();
				statusDAO = fabricaMySQL.getStatusDAO();
				choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
				tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

				idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				String telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				boolean factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");

				ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
				ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
				ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
				ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
				ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
				ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
				ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
				ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
				ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getInt("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);

				bitacoraServicioTO = new BitacoraServicioTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado, arrTelefonistaTO,
						arrOperadoraTO, arrFormaPagoTO, arrClienteTO,
						arrDireccionDestinoTO, arrClienteDireccionTO,
						arrStatusTO, arrBitacoraChoferUnidadTO,
						arrTipoServicioTO);

				ps.close();
				conexion.close();
				System.out.println("bien");

				return bitacoraServicioTO;
			}
			System.out.println("no enconctre");


			ps.close();
			conexion.close();
			return null;

		} catch (Exception e) {
			System.out.println("error");

			e.printStackTrace();
			return null;
		}
	}

	@Override
	public int insertBitacoraServicio(BitacoraServicioTO bitacoraServicioTO) {
		needsUpdate = true;
		
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();
			
			
			
			PreparedStatement ps = conexion.prepareStatement(INSERT);
			
			ps.setDate(1, FechaHoraTO.getFecha(bitacoraServicioTO.getFechaEntrada()));
			ps.setTime(2, FechaHoraTO.getHora(bitacoraServicioTO.getHoraEntrada()));
			ps.setInt(3, bitacoraServicioTO.getTiempo());
			ps.setDate(4, FechaHoraTO.getFecha(bitacoraServicioTO.getFechaCaptura()));
			ps.setTime(5, FechaHoraTO.getHora(bitacoraServicioTO.getHoraCaptura()));
			ps.setDate(6, FechaHoraTO.getFecha(bitacoraServicioTO.getFechaAsignacion()));
			ps.setTime(7, FechaHoraTO.getHora(bitacoraServicioTO.getHoraAsignacion()));
			ps.setDate(8, FechaHoraTO.getFecha(bitacoraServicioTO.getFechaCubierto()));
			ps.setTime(9, FechaHoraTO.getHora(bitacoraServicioTO.getHoraCubierto()));
			ps.setString(10, bitacoraServicioTO.getObservaciones());
			ps.setString(11, bitacoraServicioTO.getTelefono());
			ps.setBoolean(12, bitacoraServicioTO.getFactura());
			ps.setDouble(13, bitacoraServicioTO.getCostoEstimado());
			ps.setInt(14, bitacoraServicioTO.getIdUsuarioTelefonista());
			
			if(bitacoraServicioTO.getIdUsuarioOperadora() < 1)
				ps.setNull(15, java.sql.Types.INTEGER);
			else
				ps.setInt(15, bitacoraServicioTO.getIdUsuarioOperadora());
			
			if(bitacoraServicioTO.getIdFormaPago() < (short)1)
				ps.setNull(16, java.sql.Types.SMALLINT);
			else
				ps.setShort(16, bitacoraServicioTO.getIdFormaPago());
			
			if(bitacoraServicioTO.getIdCliente()< 1)
				ps.setNull(17, java.sql.Types.INTEGER);
			else
				ps.setInt(17, bitacoraServicioTO.getIdCliente());
			
			if(bitacoraServicioTO.getIdDireccionDestino()< 1)
				ps.setNull(18, java.sql.Types.NULL);
			else	
				ps.setInt(18, bitacoraServicioTO.getIdDireccionDestino());
			
			if(bitacoraServicioTO.getIdClienteDireccion()<1)
				ps.setNull(19, java.sql.Types.NULL);
			else
				ps.setInt(19, bitacoraServicioTO.getIdClienteDireccion());
			
			ps.setShort(20, bitacoraServicioTO.getIdStatus());
			
			if(bitacoraServicioTO.getIdOperacionChofUni()<1)
				ps.setNull(21, java.sql.Types.NULL);
			else
				ps.setInt(21, bitacoraServicioTO.getIdOperacionChofUni());
			
			if(bitacoraServicioTO.getIdTipoServicio()< 1)
				ps.setNull(22, java.sql.Types.NULL);
			else
				ps.setInt(22, bitacoraServicioTO.getIdTipoServicio());

			ps.executeUpdate();

			// atrapa el indice del campo agregado
		    int autoIncIndice = -1;
		    ResultSet rs = ps.getGeneratedKeys();

		    if (rs.next()) {
		        autoIncIndice = rs.getInt(1);
		    } else {
		    	System.err.print("No se pudo agregar campo");
		    	return 0;
		    }
			
			ps.close();
			conexion.close();

			System.out.println("Indice: " + autoIncIndice);
			
			return autoIncIndice;
			} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
	}

	@Override
	public ArrayList<BitacoraServicioTO> selectBitacoraServicio() {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<BitacoraServicioTO> bitacoraServicioTO = null;
			BitacoraServicioTO bitacoraServicioTO2 = null;

			PreparedStatement ps = conexion.prepareStatement(SELECT);

			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (bitacoraServicioTO == null) {
					bitacoraServicioTO = new ArrayList<BitacoraServicioTO>();
					
					
		
					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

				}

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				String telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				boolean factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");

				ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
				ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
				ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
				ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
				ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
				ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
				ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
				ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
				ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getInt("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);

				bitacoraServicioTO2 = new BitacoraServicioTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado, arrTelefonistaTO,
						arrOperadoraTO, arrFormaPagoTO, arrClienteTO,
						arrDireccionDestinoTO, arrClienteDireccionTO,
						arrStatusTO, arrBitacoraChoferUnidadTO,
						arrTipoServicioTO);

				bitacoraServicioTO.add(bitacoraServicioTO2);
			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraServicioTO selectByRangoFechaHoraCliente(Date inicioFecha,
			Date finFecha, Time inicioHora, Time finHora, int idCliente) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFechaEntrada = null;
			ArrayList<java.sql.Time> listHoraEntrada = null;
			ArrayList<Integer> listTiempo = null;
			ArrayList<String> listTelefono = null;
			ArrayList<java.sql.Date> listFechaCaptura = null;
			ArrayList<java.sql.Time> listHoraCaptura = null;
			ArrayList<java.sql.Date> listFechaAsignacion = null;
			ArrayList<java.sql.Time> listHoraAsignacion = null;
			ArrayList<java.sql.Date> listFechaCubierto = null;
			ArrayList<java.sql.Time> listHoraCubierto = null;
			ArrayList<String> listObservaciones = null;
			ArrayList<Boolean> listFactura = null;
			ArrayList<Double> listCostoEstimado = null;

			ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
			ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
			ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
			ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
			ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
			ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
			ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
			ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
			ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

			BitacoraServicioTO bitacoraServicioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORACLIENTE);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setInt(5, idCliente);
			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFechaEntrada = new ArrayList<java.sql.Date>();
					listHoraEntrada = new ArrayList<java.sql.Time>();
					listTiempo = new ArrayList<Integer>();
					listTelefono = new ArrayList<String>();
					listFechaCaptura = new ArrayList<java.sql.Date>();
					listHoraCaptura = new ArrayList<java.sql.Time>();
					listFechaAsignacion = new ArrayList<java.sql.Date>();
					listHoraAsignacion = new ArrayList<java.sql.Time>();
					listFechaCubierto = new ArrayList<java.sql.Date>();
					listHoraCubierto = new ArrayList<java.sql.Time>();
					listObservaciones = new ArrayList<String>();
					listFactura = new ArrayList<Boolean>();
					listCostoEstimado = new ArrayList<Double>();

					
					
					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

					

				}

				listIdOperacion.add(rs.getInt("id_operacion"));
				listFechaEntrada.add(rs.getDate("fecha_entrada"));
				listHoraEntrada.add(rs.getTime("hora_entrada"));
				listTiempo.add(rs.getInt("tiempo"));
				listTelefono.add(rs.getString("telefono"));
				listFechaCaptura.add(rs.getDate("fecha_captura"));
				listHoraCaptura.add(rs.getTime("hora_captura"));
				listFechaAsignacion.add(rs.getDate("fecha_asignacion"));
				listHoraAsignacion.add(rs.getTime("hora_asignacion"));
				listFechaCubierto.add(rs.getDate("fecha_cubierto"));
				listHoraCubierto.add(rs.getTime("hora_cubierto"));
				listObservaciones.add(rs.getString("observaciones"));
				listFactura.add(rs.getBoolean("factura"));
				listCostoEstimado.add(rs.getDouble("costo_estimado"));

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));

				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

			}
			if (listIdOperacion != null) {
				listClienteTO.add(clienteDAO.findClienteById(idCliente));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFechaEntrada = (Date[]) listFechaEntrada
						.toArray(new Date[listFechaEntrada.size()]);
				Date[] arrFechaCaptura = (Date[]) listFechaCaptura
						.toArray(new Date[listFechaCaptura.size()]);
				Date[] arrFechaCubierto = (Date[]) listFechaCubierto
						.toArray(new Date[listFechaCubierto.size()]);
				Date[] arrFechaAsignacion = (Date[]) listFechaAsignacion
						.toArray(new Date[listFechaAsignacion.size()]);
				Time[] arrHoraEntrada = (Time[]) listHoraEntrada
						.toArray(new Time[listHoraEntrada.size()]);
				Time[] arrHoraCaptura = (Time[]) listHoraCaptura
						.toArray(new Time[listHoraCaptura.size()]);
				Time[] arrHoraAsignacion = (Time[]) listHoraAsignacion
						.toArray(new Time[listHoraAsignacion.size()]);
				Time[] arrHoraCubierto = (Time[]) listHoraCubierto
						.toArray(new Time[listHoraCubierto.size()]);
				Integer[] arrTiempo = (Integer[]) listTiempo
						.toArray(new Integer[listTiempo.size()]);
				String[] arrObservaciones = (String[]) listObservaciones
						.toArray(new String[listObservaciones.size()]);
				String[] arrTelefono = (String[]) listTelefono
						.toArray(new String[listTelefono.size()]);
				Boolean[] arrFactura = (Boolean[]) listFactura
						.toArray(new Boolean[listFactura.size()]);
				Double[] arrCostoEstimado = (Double[]) listCostoEstimado
						.toArray(new Double[listCostoEstimado.size()]);

				bitacoraServicioTO = new BitacoraServicioTO(arrIdOperacion,
						arrFechaEntrada, arrHoraEntrada, arrTiempo,
						arrFechaCaptura, arrHoraCaptura, arrFechaAsignacion,
						arrHoraAsignacion, arrFechaCubierto, arrHoraCubierto,
						arrObservaciones, arrTelefono, arrFactura,
						arrCostoEstimado, arrTelefonistaTO, arrOperadoraTO,
						arrFormaPagoTO, arrClienteTO, arrDireccionDestinoTO,
						arrClienteDireccionTO, arrStatusTO,
						arrBitacoraChoferUnidadTO, arrTipoServicioTO);

			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ArrayList<BitacoraServicioTO> selectByRangoFechaHoraFactura(
			Date inicioFecha, Date finFecha, Time inicioHora, Time finHora,
			boolean factura) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;

			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<BitacoraServicioTO> bitacoraServicioTO = null;
			BitacoraServicioTO bitacoraServicioTO2 = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORAFACTURA);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setBoolean(5, factura);
			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (bitacoraServicioTO == null) {
					bitacoraServicioTO = new ArrayList<BitacoraServicioTO>();

					

					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

				}

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				String telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");

				ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
				ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
				ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
				ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
				ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
				ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
				ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
				ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
				ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getInt("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);

				bitacoraServicioTO2 = new BitacoraServicioTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado, arrTelefonistaTO,
						arrOperadoraTO, arrFormaPagoTO, arrClienteTO,
						arrDireccionDestinoTO, arrClienteDireccionTO,
						arrStatusTO, arrBitacoraChoferUnidadTO,
						arrTipoServicioTO);

				bitacoraServicioTO.add(bitacoraServicioTO2);
			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraServicioTO selectByRangoFechaHoraFormaPago(Date inicioFecha,
			Date finFecha, Time inicioHora, Time finHora, short idFormaPago) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFechaEntrada = null;
			ArrayList<java.sql.Time> listHoraEntrada = null;
			ArrayList<Integer> listTiempo = null;
			ArrayList<String> listTelefono = null;
			ArrayList<java.sql.Date> listFechaCaptura = null;
			ArrayList<java.sql.Time> listHoraCaptura = null;
			ArrayList<java.sql.Date> listFechaAsignacion = null;
			ArrayList<java.sql.Time> listHoraAsignacion = null;
			ArrayList<java.sql.Date> listFechaCubierto = null;
			ArrayList<java.sql.Time> listHoraCubierto = null;
			ArrayList<String> listObservaciones = null;
			ArrayList<Boolean> listFactura = null;
			ArrayList<Double> listCostoEstimado = null;

			ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
			ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
			ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
			ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
			ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
			ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
			ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
			ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
			ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

			BitacoraServicioTO bitacoraServicioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORAFORMAPAGO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setShort(5, idFormaPago);
			ResultSet rs = ps.executeQuery();
			
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			
			int contador = 0; //numero de rows
			while (rs.next()) {
				contador++;
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFechaEntrada = new ArrayList<java.sql.Date>();
					listHoraEntrada = new ArrayList<java.sql.Time>();
					listTiempo = new ArrayList<Integer>();
					listTelefono = new ArrayList<String>();
					listFechaCaptura = new ArrayList<java.sql.Date>();
					listHoraCaptura = new ArrayList<java.sql.Time>();
					listFechaAsignacion = new ArrayList<java.sql.Date>();
					listHoraAsignacion = new ArrayList<java.sql.Time>();
					listFechaCubierto = new ArrayList<java.sql.Date>();
					listHoraCubierto = new ArrayList<java.sql.Time>();
					listObservaciones = new ArrayList<String>();
					listFactura = new ArrayList<Boolean>();
					listCostoEstimado = new ArrayList<Double>();

					
					
					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

					

				}

				listIdOperacion.add(rs.getInt("id_operacion"));
				listFechaEntrada.add(rs.getDate("fecha_entrada"));
				listHoraEntrada.add(rs.getTime("hora_entrada"));
				listTiempo.add(rs.getInt("tiempo"));
				listTelefono.add(rs.getString("telefono"));
				listFechaCaptura.add(rs.getDate("fecha_captura"));
				listHoraCaptura.add(rs.getTime("hora_captura"));
				listFechaAsignacion.add(rs.getDate("fecha_asignacion"));
				listHoraAsignacion.add(rs.getTime("hora_asignacion"));
				listFechaCubierto.add(rs.getDate("fecha_cubierto"));
				listHoraCubierto.add(rs.getTime("hora_cubierto"));
				listObservaciones.add(rs.getString("observaciones"));
				listFactura.add(rs.getBoolean("factura"));
				listCostoEstimado.add(rs.getDouble("costo_estimado"));

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));

				listClienteTO.add(clienteDAO.findClienteById(rs
						.getShort("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

			}
			if(contador==0){
				ps.close();
				conexion.close();
				return null;
			}
			
			if (listIdOperacion != null) {
				listFormaPagoTO
						.add(formaPagoDAO.findFormaPagoById(idFormaPago));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFechaEntrada = (Date[]) listFechaEntrada
						.toArray(new Date[listFechaEntrada.size()]);
				Date[] arrFechaCaptura = (Date[]) listFechaCaptura
						.toArray(new Date[listFechaCaptura.size()]);
				Date[] arrFechaCubierto = (Date[]) listFechaCubierto
						.toArray(new Date[listFechaCubierto.size()]);
				Date[] arrFechaAsignacion = (Date[]) listFechaAsignacion
						.toArray(new Date[listFechaAsignacion.size()]);
				Time[] arrHoraEntrada = (Time[]) listHoraEntrada
						.toArray(new Time[listHoraEntrada.size()]);
				Time[] arrHoraCaptura = (Time[]) listHoraCaptura
						.toArray(new Time[listHoraCaptura.size()]);
				Time[] arrHoraAsignacion = (Time[]) listHoraAsignacion
						.toArray(new Time[listHoraAsignacion.size()]);
				Time[] arrHoraCubierto = (Time[]) listHoraCubierto
						.toArray(new Time[listHoraCubierto.size()]);
				Integer[] arrTiempo = (Integer[]) listTiempo
						.toArray(new Integer[listTiempo.size()]);
				String[] arrObservaciones = (String[]) listObservaciones
						.toArray(new String[listObservaciones.size()]);
				String[] arrTelefono = (String[]) listTelefono
						.toArray(new String[listTelefono.size()]);
				Boolean[] arrFactura = (Boolean[]) listFactura
						.toArray(new Boolean[listFactura.size()]);
				Double[] arrCostoEstimado = (Double[]) listCostoEstimado
						.toArray(new Double[listCostoEstimado.size()]);

				bitacoraServicioTO = new BitacoraServicioTO(arrIdOperacion,
						arrFechaEntrada, arrHoraEntrada, arrTiempo,
						arrFechaCaptura, arrHoraCaptura, arrFechaAsignacion,
						arrHoraAsignacion, arrFechaCubierto, arrHoraCubierto,
						arrObservaciones, arrTelefono, arrFactura,
						arrCostoEstimado, arrTelefonistaTO, arrOperadoraTO,
						arrFormaPagoTO, arrClienteTO, arrDireccionDestinoTO,
						arrClienteDireccionTO, arrStatusTO,
						arrBitacoraChoferUnidadTO, arrTipoServicioTO);
			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraServicioTO selectByRangoFechaHoraOperadora(Date inicioFecha,
			Date finFecha, Time inicioHora, Time finHora, int idOperadora) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFechaEntrada = null;
			ArrayList<java.sql.Time> listHoraEntrada = null;
			ArrayList<Integer> listTiempo = null;
			ArrayList<String> listTelefono = null;
			ArrayList<java.sql.Date> listFechaCaptura = null;
			ArrayList<java.sql.Time> listHoraCaptura = null;
			ArrayList<java.sql.Date> listFechaAsignacion = null;
			ArrayList<java.sql.Time> listHoraAsignacion = null;
			ArrayList<java.sql.Date> listFechaCubierto = null;
			ArrayList<java.sql.Time> listHoraCubierto = null;
			ArrayList<String> listObservaciones = null;
			ArrayList<Boolean> listFactura = null;
			ArrayList<Double> listCostoEstimado = null;

			ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
			ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
			ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
			ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
			ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
			ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
			ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
			ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
			ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

			BitacoraServicioTO bitacoraServicioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORAOPERADORA);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setInt(5, idOperadora);
			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFechaEntrada = new ArrayList<java.sql.Date>();
					listHoraEntrada = new ArrayList<java.sql.Time>();
					listTiempo = new ArrayList<Integer>();
					listTelefono = new ArrayList<String>();
					listFechaCaptura = new ArrayList<java.sql.Date>();
					listHoraCaptura = new ArrayList<java.sql.Time>();
					listFechaAsignacion = new ArrayList<java.sql.Date>();
					listHoraAsignacion = new ArrayList<java.sql.Time>();
					listFechaCubierto = new ArrayList<java.sql.Date>();
					listHoraCubierto = new ArrayList<java.sql.Time>();
					listObservaciones = new ArrayList<String>();
					listFactura = new ArrayList<Boolean>();
					listCostoEstimado = new ArrayList<Double>();

					
					
					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

					

				}

				listIdOperacion.add(rs.getInt("id_operacion"));
				listFechaEntrada.add(rs.getDate("fecha_entrada"));
				listHoraEntrada.add(rs.getTime("hora_entrada"));
				listTiempo.add(rs.getInt("tiempo"));
				listTelefono.add(rs.getString("telefono"));
				listFechaCaptura.add(rs.getDate("fecha_captura"));
				listHoraCaptura.add(rs.getTime("hora_captura"));
				listFechaAsignacion.add(rs.getDate("fecha_asignacion"));
				listHoraAsignacion.add(rs.getTime("hora_asignacion"));
				listFechaCubierto.add(rs.getDate("fecha_cubierto"));
				listHoraCubierto.add(rs.getTime("hora_cubierto"));
				listObservaciones.add(rs.getString("observaciones"));
				listFactura.add(rs.getBoolean("factura"));
				listCostoEstimado.add(rs.getDouble("costo_estimado"));

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));

				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getShort("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

			}
			if (listIdOperacion != null) {
				listOperadora.add(usuarioDAO.findUsuarioById(idOperadora));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFechaEntrada = (Date[]) listFechaEntrada
						.toArray(new Date[listFechaEntrada.size()]);
				Date[] arrFechaCaptura = (Date[]) listFechaCaptura
						.toArray(new Date[listFechaCaptura.size()]);
				Date[] arrFechaCubierto = (Date[]) listFechaCubierto
						.toArray(new Date[listFechaCubierto.size()]);
				Date[] arrFechaAsignacion = (Date[]) listFechaAsignacion
						.toArray(new Date[listFechaAsignacion.size()]);
				Time[] arrHoraEntrada = (Time[]) listHoraEntrada
						.toArray(new Time[listHoraEntrada.size()]);
				Time[] arrHoraCaptura = (Time[]) listHoraCaptura
						.toArray(new Time[listHoraCaptura.size()]);
				Time[] arrHoraAsignacion = (Time[]) listHoraAsignacion
						.toArray(new Time[listHoraAsignacion.size()]);
				Time[] arrHoraCubierto = (Time[]) listHoraCubierto
						.toArray(new Time[listHoraCubierto.size()]);
				Integer[] arrTiempo = (Integer[]) listTiempo
						.toArray(new Integer[listTiempo.size()]);
				String[] arrObservaciones = (String[]) listObservaciones
						.toArray(new String[listObservaciones.size()]);
				String[] arrTelefono = (String[]) listTelefono
						.toArray(new String[listTelefono.size()]);
				Boolean[] arrFactura = (Boolean[]) listFactura
						.toArray(new Boolean[listFactura.size()]);
				Double[] arrCostoEstimado = (Double[]) listCostoEstimado
						.toArray(new Double[listCostoEstimado.size()]);

				bitacoraServicioTO = new BitacoraServicioTO(arrIdOperacion,
						arrFechaEntrada, arrHoraEntrada, arrTiempo,
						arrFechaCaptura, arrHoraCaptura, arrFechaAsignacion,
						arrHoraAsignacion, arrFechaCubierto, arrHoraCubierto,
						arrObservaciones, arrTelefono, arrFactura,
						arrCostoEstimado, arrTelefonistaTO, arrOperadoraTO,
						arrFormaPagoTO, arrClienteTO, arrDireccionDestinoTO,
						arrClienteDireccionTO, arrStatusTO,
						arrBitacoraChoferUnidadTO, arrTipoServicioTO);

			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ArrayList<BitacoraServicioTO> selectByRangoFechaHoraRangoUnidad(
			Date inicioFecha, Date finFecha, Time inicioHora, Time finHora,
			int inicioUnidad, int finUnidad) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;

			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<BitacoraServicioTO> bitacoraServicioTO = null;
			BitacoraServicioTO bitacoraServicioTO2 = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORARANGOUNIDAD);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setInt(5, inicioUnidad);
			ps.setInt(6, finUnidad);
			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (bitacoraServicioTO == null) {
					bitacoraServicioTO = new ArrayList<BitacoraServicioTO>();

					

					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

				}

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				String telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				boolean factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");

				ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
				ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
				ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
				ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
				ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
				ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
				ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
				ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
				ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getInt("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);

				bitacoraServicioTO2 = new BitacoraServicioTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado, arrTelefonistaTO,
						arrOperadoraTO, arrFormaPagoTO, arrClienteTO,
						arrDireccionDestinoTO, arrClienteDireccionTO,
						arrStatusTO, arrBitacoraChoferUnidadTO,
						arrTipoServicioTO);

				bitacoraServicioTO.add(bitacoraServicioTO2);
			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraServicioTO selectByRangoFechaHoraRangoUnidadStatus(
			Date inicioFecha, Date finFecha, Time inicioHora, Time finHora,
			int inicioUnidad, int finUnidad, short idStatus) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFechaEntrada = null;
			ArrayList<java.sql.Time> listHoraEntrada = null;
			ArrayList<Integer> listTiempo = null;
			ArrayList<String> listTelefono = null;
			ArrayList<java.sql.Date> listFechaCaptura = null;
			ArrayList<java.sql.Time> listHoraCaptura = null;
			ArrayList<java.sql.Date> listFechaAsignacion = null;
			ArrayList<java.sql.Time> listHoraAsignacion = null;
			ArrayList<java.sql.Date> listFechaCubierto = null;
			ArrayList<java.sql.Time> listHoraCubierto = null;
			ArrayList<String> listObservaciones = null;
			ArrayList<Boolean> listFactura = null;
			ArrayList<Double> listCostoEstimado = null;

			ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
			ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
			ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
			ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
			ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
			ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
			ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
			ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
			ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

			BitacoraServicioTO bitacoraServicioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORARANGOUNIDADSTATUS);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setInt(5, inicioUnidad);
			ps.setInt(6, finUnidad);
			ps.setShort(7, idStatus);
			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFechaEntrada = new ArrayList<java.sql.Date>();
					listHoraEntrada = new ArrayList<java.sql.Time>();
					listTiempo = new ArrayList<Integer>();
					listTelefono = new ArrayList<String>();
					listFechaCaptura = new ArrayList<java.sql.Date>();
					listHoraCaptura = new ArrayList<java.sql.Time>();
					listFechaAsignacion = new ArrayList<java.sql.Date>();
					listHoraAsignacion = new ArrayList<java.sql.Time>();
					listFechaCubierto = new ArrayList<java.sql.Date>();
					listHoraCubierto = new ArrayList<java.sql.Time>();
					listObservaciones = new ArrayList<String>();
					listFactura = new ArrayList<Boolean>();
					listCostoEstimado = new ArrayList<Double>();

					
					
					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

					

				}

				listIdOperacion.add(rs.getInt("id_operacion"));
				listFechaEntrada.add(rs.getDate("fecha_entrada"));
				listHoraEntrada.add(rs.getTime("hora_entrada"));
				listTiempo.add(rs.getInt("tiempo"));
				listTelefono.add(rs.getString("telefono"));
				listFechaCaptura.add(rs.getDate("fecha_captura"));
				listHoraCaptura.add(rs.getTime("hora_captura"));
				listFechaAsignacion.add(rs.getDate("fecha_asignacion"));
				listHoraAsignacion.add(rs.getTime("hora_asignacion"));
				listFechaCubierto.add(rs.getDate("fecha_cubierto"));
				listHoraCubierto.add(rs.getTime("hora_cubierto"));
				listObservaciones.add(rs.getString("observaciones"));
				listFactura.add(rs.getBoolean("factura"));
				listCostoEstimado.add(rs.getDouble("costo_estimado"));

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById((rs
						.getInt("id_usuario_operadora"))));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getShort("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));

				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

			}
			if (listIdOperacion != null) {
				listStatusTO.add(statusDAO.findStatusById(idStatus));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFechaEntrada = (Date[]) listFechaEntrada
						.toArray(new Date[listFechaEntrada.size()]);
				Date[] arrFechaCaptura = (Date[]) listFechaCaptura
						.toArray(new Date[listFechaCaptura.size()]);
				Date[] arrFechaCubierto = (Date[]) listFechaCubierto
						.toArray(new Date[listFechaCubierto.size()]);
				Date[] arrFechaAsignacion = (Date[]) listFechaAsignacion
						.toArray(new Date[listFechaAsignacion.size()]);
				Time[] arrHoraEntrada = (Time[]) listHoraEntrada
						.toArray(new Time[listHoraEntrada.size()]);
				Time[] arrHoraCaptura = (Time[]) listHoraCaptura
						.toArray(new Time[listHoraCaptura.size()]);
				Time[] arrHoraAsignacion = (Time[]) listHoraAsignacion
						.toArray(new Time[listHoraAsignacion.size()]);
				Time[] arrHoraCubierto = (Time[]) listHoraCubierto
						.toArray(new Time[listHoraCubierto.size()]);
				Integer[] arrTiempo = (Integer[]) listTiempo
						.toArray(new Integer[listTiempo.size()]);
				String[] arrObservaciones = (String[]) listObservaciones
						.toArray(new String[listObservaciones.size()]);
				String[] arrTelefono = (String[]) listTelefono
						.toArray(new String[listTelefono.size()]);
				Boolean[] arrFactura = (Boolean[]) listFactura
						.toArray(new Boolean[listFactura.size()]);
				Double[] arrCostoEstimado = (Double[]) listCostoEstimado
						.toArray(new Double[listCostoEstimado.size()]);

				bitacoraServicioTO = new BitacoraServicioTO(arrIdOperacion,
						arrFechaEntrada, arrHoraEntrada, arrTiempo,
						arrFechaCaptura, arrHoraCaptura, arrFechaAsignacion,
						arrHoraAsignacion, arrFechaCubierto, arrHoraCubierto,
						arrObservaciones, arrTelefono, arrFactura,
						arrCostoEstimado, arrTelefonistaTO, arrOperadoraTO,
						arrFormaPagoTO, arrClienteTO, arrDireccionDestinoTO,
						arrClienteDireccionTO, arrStatusTO,
						arrBitacoraChoferUnidadTO, arrTipoServicioTO);

			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraServicioTO selectByRangoFechaHoraRangoUnidadStatusTipoServicio(
			Date inicioFecha, Date finFecha, Time inicioHora, Time finHora,
			int inicioUnidad, int finUnidad, short idStatus, int idTipoServicio) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFechaEntrada = null;
			ArrayList<java.sql.Time> listHoraEntrada = null;
			ArrayList<Integer> listTiempo = null;
			ArrayList<String> listTelefono = null;
			ArrayList<java.sql.Date> listFechaCaptura = null;
			ArrayList<java.sql.Time> listHoraCaptura = null;
			ArrayList<java.sql.Date> listFechaAsignacion = null;
			ArrayList<java.sql.Time> listHoraAsignacion = null;
			ArrayList<java.sql.Date> listFechaCubierto = null;
			ArrayList<java.sql.Time> listHoraCubierto = null;
			ArrayList<String> listObservaciones = null;
			ArrayList<Boolean> listFactura = null;
			ArrayList<Double> listCostoEstimado = null;

			ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
			ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
			ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
			ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
			ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
			ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
			ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
			ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
			ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

			BitacoraServicioTO bitacoraServicioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORARANGOUNIDADSTATUSTIPOSERVICIO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setInt(5, inicioUnidad);
			ps.setInt(6, finUnidad);
			ps.setShort(7, idStatus);
			ps.setInt(8, idTipoServicio);
			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFechaEntrada = new ArrayList<java.sql.Date>();
					listHoraEntrada = new ArrayList<java.sql.Time>();
					listTiempo = new ArrayList<Integer>();
					listTelefono = new ArrayList<String>();
					listFechaCaptura = new ArrayList<java.sql.Date>();
					listHoraCaptura = new ArrayList<java.sql.Time>();
					listFechaAsignacion = new ArrayList<java.sql.Date>();
					listHoraAsignacion = new ArrayList<java.sql.Time>();
					listFechaCubierto = new ArrayList<java.sql.Date>();
					listHoraCubierto = new ArrayList<java.sql.Time>();
					listObservaciones = new ArrayList<String>();
					listFactura = new ArrayList<Boolean>();
					listCostoEstimado = new ArrayList<Double>();

					
					
					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

					

				}

				listIdOperacion.add(rs.getInt("id_operacion"));
				listFechaEntrada.add(rs.getDate("fecha_entrada"));
				listHoraEntrada.add(rs.getTime("hora_entrada"));
				listTiempo.add(rs.getInt("tiempo"));
				listTelefono.add(rs.getString("telefono"));
				listFechaCaptura.add(rs.getDate("fecha_captura"));
				listHoraCaptura.add(rs.getTime("hora_captura"));
				listFechaAsignacion.add(rs.getDate("fecha_asignacion"));
				listHoraAsignacion.add(rs.getTime("hora_asignacion"));
				listFechaCubierto.add(rs.getDate("fecha_cubierto"));
				listHoraCubierto.add(rs.getTime("hora_cubierto"));
				listObservaciones.add(rs.getString("observaciones"));
				listFactura.add(rs.getBoolean("factura"));
				listCostoEstimado.add(rs.getDouble("costo_estimado"));

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById((rs
						.getInt("id_usuario_operadora"))));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getShort("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));

				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));

			}
			if (listIdOperacion != null) {
				listStatusTO.add(statusDAO.findStatusById(idStatus));
				listTipoServicioTO.add(tipoServicioDAO
						.findTipoServicioById(idTipoServicio));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFechaEntrada = (Date[]) listFechaEntrada
						.toArray(new Date[listFechaEntrada.size()]);
				Date[] arrFechaCaptura = (Date[]) listFechaCaptura
						.toArray(new Date[listFechaCaptura.size()]);
				Date[] arrFechaCubierto = (Date[]) listFechaCubierto
						.toArray(new Date[listFechaCubierto.size()]);
				Date[] arrFechaAsignacion = (Date[]) listFechaAsignacion
						.toArray(new Date[listFechaAsignacion.size()]);
				Time[] arrHoraEntrada = (Time[]) listHoraEntrada
						.toArray(new Time[listHoraEntrada.size()]);
				Time[] arrHoraCaptura = (Time[]) listHoraCaptura
						.toArray(new Time[listHoraCaptura.size()]);
				Time[] arrHoraAsignacion = (Time[]) listHoraAsignacion
						.toArray(new Time[listHoraAsignacion.size()]);
				Time[] arrHoraCubierto = (Time[]) listHoraCubierto
						.toArray(new Time[listHoraCubierto.size()]);
				Integer[] arrTiempo = (Integer[]) listTiempo
						.toArray(new Integer[listTiempo.size()]);
				String[] arrObservaciones = (String[]) listObservaciones
						.toArray(new String[listObservaciones.size()]);
				String[] arrTelefono = (String[]) listTelefono
						.toArray(new String[listTelefono.size()]);
				Boolean[] arrFactura = (Boolean[]) listFactura
						.toArray(new Boolean[listFactura.size()]);
				Double[] arrCostoEstimado = (Double[]) listCostoEstimado
						.toArray(new Double[listCostoEstimado.size()]);

				bitacoraServicioTO = new BitacoraServicioTO(arrIdOperacion,
						arrFechaEntrada, arrHoraEntrada, arrTiempo,
						arrFechaCaptura, arrHoraCaptura, arrFechaAsignacion,
						arrHoraAsignacion, arrFechaCubierto, arrHoraCubierto,
						arrObservaciones, arrTelefono, arrFactura,
						arrCostoEstimado, arrTelefonistaTO, arrOperadoraTO,
						arrFormaPagoTO, arrClienteTO, arrDireccionDestinoTO,
						arrClienteDireccionTO, arrStatusTO,
						arrBitacoraChoferUnidadTO, arrTipoServicioTO);

			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public BitacoraServicioTO selectByRangoFechaHoraTelefonista(
			Date inicioFecha, Date finFecha, Time inicioHora, Time finHora,
			int idTelefonista) {
		System.out.println("Recibi:");
		System.out.println("Fecha Inicio:" + inicioFecha);
		System.out.println("Hora Inicio:" + inicioHora);
		System.out.println("Fecha Termino:" + finFecha);
		System.out.println("Hora Termino:" + finHora);
		System.out.println("Id Telefonista:" + idTelefonista);
		
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<Integer> listIdOperacion = null;
			ArrayList<java.sql.Date> listFechaEntrada = null;
			ArrayList<java.sql.Time> listHoraEntrada = null;
			ArrayList<Integer> listTiempo = null;
			ArrayList<String> listTelefono = null;
			ArrayList<java.sql.Date> listFechaCaptura = null;
			ArrayList<java.sql.Time> listHoraCaptura = null;
			ArrayList<java.sql.Date> listFechaAsignacion = null;
			ArrayList<java.sql.Time> listHoraAsignacion = null;
			ArrayList<java.sql.Date> listFechaCubierto = null;
			ArrayList<java.sql.Time> listHoraCubierto = null;
			ArrayList<String> listObservaciones = null;
			ArrayList<Boolean> listFactura = null;
			ArrayList<Double> listCostoEstimado = null;

			ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
			ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
			ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
			ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
			ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
			ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
			ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
			ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
			ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

			BitacoraServicioTO bitacoraServicioTO = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORATELEFONISTA);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setInt(5, idTelefonista);
			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (listIdOperacion == null) {

					listIdOperacion = new ArrayList<Integer>();
					listFechaEntrada = new ArrayList<java.sql.Date>();
					listHoraEntrada = new ArrayList<java.sql.Time>();
					listTiempo = new ArrayList<Integer>();
					listTelefono = new ArrayList<String>();
					listFechaCaptura = new ArrayList<java.sql.Date>();
					listHoraCaptura = new ArrayList<java.sql.Time>();
					listFechaAsignacion = new ArrayList<java.sql.Date>();
					listHoraAsignacion = new ArrayList<java.sql.Time>();
					listFechaCubierto = new ArrayList<java.sql.Date>();
					listHoraCubierto = new ArrayList<java.sql.Time>();
					listObservaciones = new ArrayList<String>();
					listFactura = new ArrayList<Boolean>();
					listCostoEstimado = new ArrayList<Double>();

					
					
					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

					

				}

				listIdOperacion.add(rs.getInt("id_operacion"));
				listFechaEntrada.add(rs.getDate("fecha_entrada"));
				listHoraEntrada.add(rs.getTime("hora_entrada"));
				listTiempo.add(rs.getInt("tiempo"));
				listTelefono.add(rs.getString("telefono"));
				listFechaCaptura.add(rs.getDate("fecha_captura"));
				listHoraCaptura.add(rs.getTime("hora_captura"));
				listFechaAsignacion.add(rs.getDate("fecha_asignacion"));
				listHoraAsignacion.add(rs.getTime("hora_asignacion"));
				listFechaCubierto.add(rs.getDate("fecha_cubierto"));
				listHoraCubierto.add(rs.getTime("hora_cubierto"));
				listObservaciones.add(rs.getString("observaciones"));
				listFactura.add(rs.getBoolean("factura"));
				listCostoEstimado.add(rs.getDouble("costo_estimado"));

				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getShort("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

			}
			if (listIdOperacion != null) {
				listTelefonista.add(usuarioDAO.findUsuarioById(idTelefonista));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);
				Integer[] arrIdOperacion = (Integer[]) listIdOperacion
						.toArray(new Integer[listIdOperacion.size()]);
				Date[] arrFechaEntrada = (Date[]) listFechaEntrada
						.toArray(new Date[listFechaEntrada.size()]);
				Date[] arrFechaCaptura = (Date[]) listFechaCaptura
						.toArray(new Date[listFechaCaptura.size()]);
				Date[] arrFechaCubierto = (Date[]) listFechaCubierto
						.toArray(new Date[listFechaCubierto.size()]);
				Date[] arrFechaAsignacion = (Date[]) listFechaAsignacion
						.toArray(new Date[listFechaAsignacion.size()]);
				Time[] arrHoraEntrada = (Time[]) listHoraEntrada
						.toArray(new Time[listHoraEntrada.size()]);
				Time[] arrHoraCaptura = (Time[]) listHoraCaptura
						.toArray(new Time[listHoraCaptura.size()]);
				Time[] arrHoraAsignacion = (Time[]) listHoraAsignacion
						.toArray(new Time[listHoraAsignacion.size()]);
				Time[] arrHoraCubierto = (Time[]) listHoraCubierto
						.toArray(new Time[listHoraCubierto.size()]);
				Integer[] arrTiempo = (Integer[]) listTiempo
						.toArray(new Integer[listTiempo.size()]);
				String[] arrObservaciones = (String[]) listObservaciones
						.toArray(new String[listObservaciones.size()]);
				String[] arrTelefono = (String[]) listTelefono
						.toArray(new String[listTelefono.size()]);
				Boolean[] arrFactura = (Boolean[]) listFactura
						.toArray(new Boolean[listFactura.size()]);
				Double[] arrCostoEstimado = (Double[]) listCostoEstimado
						.toArray(new Double[listCostoEstimado.size()]);

				bitacoraServicioTO = new BitacoraServicioTO(arrIdOperacion,
						arrFechaEntrada, arrHoraEntrada, arrTiempo,
						arrFechaCaptura, arrHoraCaptura, arrFechaAsignacion,
						arrHoraAsignacion, arrFechaCubierto, arrHoraCubierto,
						arrObservaciones, arrTelefono, arrFactura,
						arrCostoEstimado, arrTelefonistaTO, arrOperadoraTO,
						arrFormaPagoTO, arrClienteTO, arrDireccionDestinoTO,
						arrClienteDireccionTO, arrStatusTO,
						arrBitacoraChoferUnidadTO, arrTipoServicioTO);
			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ArrayList<BitacoraServicioTO> selectByRangoFechaHoraTelefono(
			Date inicioFecha, Date finFecha, Time inicioHora, Time finHora,
			String telefono) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;

			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<BitacoraServicioTO> bitacoraServicioTO = null;
			BitacoraServicioTO bitacoraServicioTO2 = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORATELEFONO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setString(5, telefono);
			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (bitacoraServicioTO == null) {
					bitacoraServicioTO = new ArrayList<BitacoraServicioTO>();

					

					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

				}

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				boolean factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");

				ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
				ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
				ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
				ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
				ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
				ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
				ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
				ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
				ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getInt("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);

				bitacoraServicioTO2 = new BitacoraServicioTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado, arrTelefonistaTO,
						arrOperadoraTO, arrFormaPagoTO, arrClienteTO,
						arrDireccionDestinoTO, arrClienteDireccionTO,
						arrStatusTO, arrBitacoraChoferUnidadTO,
						arrTipoServicioTO);

				bitacoraServicioTO.add(bitacoraServicioTO2);
			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public ArrayList<BitacoraServicioTO> selectByRangoFechaHoraTiempo(
			Date inicioFecha, Date finFecha, Time inicioHora, Time finHora, int inicioTiempo, int finTiempo) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;

			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<BitacoraServicioTO> bitacoraServicioTO = null;
			BitacoraServicioTO bitacoraServicioTO2 = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORATIEMPO);
			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);
			ps.setInt(5, inicioTiempo);
			ps.setInt(6, finTiempo);
			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);

			while (rs.next()) {
				if (bitacoraServicioTO == null) {
					bitacoraServicioTO = new ArrayList<BitacoraServicioTO>();

				
					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

				}

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				String telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				boolean factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");

				ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
				ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
				ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
				ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
				ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
				ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
				ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
				ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
				ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getInt("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);

				bitacoraServicioTO2 = new BitacoraServicioTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado, arrTelefonistaTO,
						arrOperadoraTO, arrFormaPagoTO, arrClienteTO,
						arrDireccionDestinoTO, arrClienteDireccionTO,
						arrStatusTO, arrBitacoraChoferUnidadTO,
						arrTipoServicioTO);

				bitacoraServicioTO.add(bitacoraServicioTO2);
			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public short updateBitacoraServicio(BitacoraServicioTO bitacoraServicioTO) {
		needsUpdate=true;
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			PreparedStatement ps = conexion.prepareStatement(UPDATE);

			ps.setDate(1, FechaHoraTO.getFecha(bitacoraServicioTO.getFechaEntrada()));
			ps.setTime(2, FechaHoraTO.getHora(bitacoraServicioTO.getHoraEntrada()));
			ps.setInt(3, bitacoraServicioTO.getTiempo());
			ps.setDate(4, FechaHoraTO.getFecha(bitacoraServicioTO.getFechaCaptura()));
			ps.setTime(5, FechaHoraTO.getHora(bitacoraServicioTO.getHoraCaptura()));
			ps.setDate(6, FechaHoraTO.getFecha(bitacoraServicioTO.getFechaAsignacion()));
			ps.setTime(7, FechaHoraTO.getHora(bitacoraServicioTO.getHoraAsignacion()));
			ps.setDate(8, FechaHoraTO.getFecha(bitacoraServicioTO.getFechaCubierto()));
			ps.setTime(9, FechaHoraTO.getHora(bitacoraServicioTO.getHoraCubierto()));
			ps.setString(10, bitacoraServicioTO.getObservaciones());
			ps.setString(11, bitacoraServicioTO.getTelefono());
			ps.setBoolean(12, bitacoraServicioTO.getFactura());
			ps.setDouble(13, bitacoraServicioTO.getCostoEstimado());
			ps.setInt(14, bitacoraServicioTO.getIdUsuarioTelefonista());
			
			if(bitacoraServicioTO.getIdUsuarioOperadora() < 1)
				ps.setNull(15, java.sql.Types.INTEGER);
			else
				ps.setInt(15, bitacoraServicioTO.getIdUsuarioOperadora());
			
			if(bitacoraServicioTO.getIdFormaPago() < (short)1)
				ps.setNull(16, java.sql.Types.SMALLINT);
			else
				ps.setShort(16, bitacoraServicioTO.getIdFormaPago());
			
			if(bitacoraServicioTO.getIdCliente()< 1)
				ps.setNull(17, java.sql.Types.INTEGER);
			else
				ps.setInt(17, bitacoraServicioTO.getIdCliente());
			
			if(bitacoraServicioTO.getIdDireccionDestino()< 1)
				ps.setNull(18, java.sql.Types.NULL);
			else	
				ps.setInt(18, bitacoraServicioTO.getIdDireccionDestino());
			
			if(bitacoraServicioTO.getIdClienteDireccion()<1)
				ps.setNull(19, java.sql.Types.NULL);
			else
				ps.setInt(19, bitacoraServicioTO.getIdClienteDireccion());
			
			ps.setShort(20, bitacoraServicioTO.getIdStatus());
			
			if(bitacoraServicioTO.getIdOperacionChofUni()<1)
				ps.setNull(21, java.sql.Types.NULL);
			else
				ps.setInt(21, bitacoraServicioTO.getIdOperacionChofUni());
			
			if(bitacoraServicioTO.getIdTipoServicio()< 1)
				ps.setNull(22, java.sql.Types.NULL);
			else
				ps.setInt(22, bitacoraServicioTO.getIdTipoServicio());

			ps.setInt(23, bitacoraServicioTO.getIdOperacion());

			ps.executeUpdate();

			if (ps.getUpdateCount() == 0) {
				ps.close();
				conexion.close();
				return 0;
			} else {
				ps.close();
				conexion.close();
				return 1;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return (short) -1;
		}
	}

	public ArrayList<BitacoraServicioTO> selectBitacoraServicioByDia(java.sql.Date dia){
		System.out.println("Dia: " + dia.getTime());
		
		if(needsUpdate){
			System.out.println("Needs update");
			
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			bitacoraServicioDia = null;
			BitacoraServicioTO bitacoraServicioTO2 = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYDIA);

			ps.setDate(1, dia);

			ResultSet rs = ps.executeQuery();
		
			System.out.println("Query");
			
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (bitacoraServicioDia == null) {
					bitacoraServicioDia = new ArrayList<BitacoraServicioTO>();

					System.out.println("Nueva");
					
					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

				}

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				String telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				boolean factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");

				System.out.println("getAtts");
				
				ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
				ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
				ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
				ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
				ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
				ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
				ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
				ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
				ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getInt("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);

				bitacoraServicioTO2 = new BitacoraServicioTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado, arrTelefonistaTO,
						arrOperadoraTO, arrFormaPagoTO, arrClienteTO,
						arrDireccionDestinoTO, arrClienteDireccionTO,
						arrStatusTO, arrBitacoraChoferUnidadTO,
						arrTipoServicioTO);

				System.out.println("agrega");
				
				bitacoraServicioDia.add(bitacoraServicioTO2);
			}
			
			System.out.println("Cierra");
			ps.close();
			conexion.close();
			needsUpdate=false;
			return bitacoraServicioDia;

		} catch (Exception e) {
			
			System.out.println("Nulo");
			e.printStackTrace();
			return null;
			
			
		}
		}
		else{
			System.out.println("No hizo nada");
			return bitacoraServicioDia;
		}
	}

	
	@Override
	public ArrayList<BitacoraServicioTO> selectBitacoraServicioByRangoFechaHora(
			Date inicioFecha, Date finFecha, Time inicioHora, Time finHora) {
		try {
			Connection conexion = FabricaDeDAOsMySQL.crearConexion();

			FabricaDeDAOs fabricaMySQL = null;
			UsuarioDAO usuarioDAO = null;
			FormaPagoDAO formaPagoDAO = null;
			ClienteDAO clienteDAO = null;
			ClienteDireccionDAO clienteDireccionDAO = null;
			DireccionDAO direccionDAO = null;
			StatusDAO statusDAO = null;
			BitacoraChoferUnidadDAO choferUnidadDAO = null;
			TipoServicioDAO tipoServicioDAO = null;

			ArrayList<BitacoraServicioTO> bitacoraServicioTO = null;
			BitacoraServicioTO bitacoraServicioTO2 = null;

			PreparedStatement ps = conexion
					.prepareStatement(SELECTBYRANGOFECHAHORA);

			ps.setDate(1, inicioFecha);
			ps.setDate(2, finFecha);
			ps.setTime(3, inicioHora);
			ps.setTime(4, finHora);

			ResultSet rs = ps.executeQuery();
			fabricaMySQL = FabricaDeDAOs
			.getFabricaDeDAOs(mx.ipn.Constantes.FABRICA_DAOS_MYSQL);
			while (rs.next()) {
				if (bitacoraServicioTO == null) {
					bitacoraServicioTO = new ArrayList<BitacoraServicioTO>();

					

					usuarioDAO = fabricaMySQL.getUsuarioDAO();
					formaPagoDAO = fabricaMySQL.getFormaPagoDAO();
					clienteDAO = fabricaMySQL.getClienteDAO();
					clienteDireccionDAO = fabricaMySQL.getClienteDireccionDAO();
					direccionDAO = fabricaMySQL.getDireccionDAO();
					statusDAO = fabricaMySQL.getStatusDAO();
					choferUnidadDAO = fabricaMySQL.getBitacoraChoferUnidadDAO();
					tipoServicioDAO = fabricaMySQL.getTipoServicioDAO();

				}

				int idOperacion = rs.getInt("id_operacion");
				java.sql.Date fechaEntrada = rs.getDate("fecha_entrada");
				java.sql.Time horaEntrada = rs.getTime("hora_entrada");
				int tiempo = rs.getInt("tiempo");
				java.sql.Date fechaCaptura = rs.getDate("fecha_captura");
				java.sql.Time horaCaptura = rs.getTime("hora_captura");
				java.sql.Date fechaAsignacion = rs.getDate("fecha_asignacion");
				java.sql.Time horaAsignacion = rs.getTime("hora_asignacion");
				java.sql.Date fechaCubierto = rs.getDate("fecha_cubierto");
				java.sql.Time horaCubierto = rs.getTime("hora_cubierto");
				String telefono = rs.getString("telefono");
				String observaciones = rs.getString("observaciones");
				boolean factura = rs.getBoolean("factura");
				double costoEstimado = rs.getDouble("costo_estimado");

				ArrayList<UsuarioTO> listTelefonista = new ArrayList<UsuarioTO>();
				ArrayList<UsuarioTO> listOperadora = new ArrayList<UsuarioTO>();
				ArrayList<FormaPagoTO> listFormaPagoTO = new ArrayList<FormaPagoTO>();
				ArrayList<ClienteTO> listClienteTO = new ArrayList<ClienteTO>();
				ArrayList<DireccionTO> listDireccionDestino = new ArrayList<DireccionTO>();
				ArrayList<ClienteDireccionTO> listClienteDireccionTO = new ArrayList<ClienteDireccionTO>();
				ArrayList<StatusTO> listStatusTO = new ArrayList<StatusTO>();
				ArrayList<BitacoraChoferUnidadTO> listChoferUnidad = new ArrayList<BitacoraChoferUnidadTO>();
				ArrayList<TipoServicioTO> listTipoServicioTO = new ArrayList<TipoServicioTO>();

				listTelefonista.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_telefonista")));
				listOperadora.add(usuarioDAO.findUsuarioById(rs
						.getInt("id_usuario_operadora")));
				listFormaPagoTO.add(formaPagoDAO.findFormaPagoById(rs
						.getShort("id_forma_pago")));
				listClienteTO.add(clienteDAO.findClienteById(rs
						.getInt("id_cliente")));
				listDireccionDestino.add(direccionDAO.findDireccionById(rs
						.getInt("id_direccion_destino")));
				listClienteDireccionTO.add(clienteDireccionDAO
						.findClienteDireccionById(rs
								.getInt("id_cliente_direccion")));
				listStatusTO.add(statusDAO.findStatusById(rs
						.getShort("id_status")));
				listChoferUnidad.add(choferUnidadDAO
						.findBitacoraChoferUnidadById(rs
								.getInt("id_operacion_chof_uni")));
				listTipoServicioTO.add(tipoServicioDAO.findTipoServicioById(rs
						.getInt("id_tipo_servicio")));

				FormaPagoTO[] arrFormaPagoTO = (FormaPagoTO[]) listFormaPagoTO
						.toArray(new FormaPagoTO[listFormaPagoTO.size()]);
				UsuarioTO[] arrTelefonistaTO = (UsuarioTO[]) listTelefonista
						.toArray(new UsuarioTO[listTelefonista.size()]);
				UsuarioTO[] arrOperadoraTO = (UsuarioTO[]) listOperadora
						.toArray(new UsuarioTO[listOperadora.size()]);
				ClienteTO[] arrClienteTO = (ClienteTO[]) listClienteTO
						.toArray(new ClienteTO[listClienteTO.size()]);
				DireccionTO[] arrDireccionDestinoTO = (DireccionTO[]) listDireccionDestino
						.toArray(new DireccionTO[listDireccionDestino.size()]);
				ClienteDireccionTO[] arrClienteDireccionTO = (ClienteDireccionTO[]) listClienteDireccionTO
						.toArray(new ClienteDireccionTO[listClienteDireccionTO
								.size()]);
				StatusTO[] arrStatusTO = (StatusTO[]) listStatusTO
						.toArray(new StatusTO[listStatusTO.size()]);
				BitacoraChoferUnidadTO[] arrBitacoraChoferUnidadTO = (BitacoraChoferUnidadTO[]) listChoferUnidad
						.toArray(new BitacoraChoferUnidadTO[listChoferUnidad
								.size()]);
				TipoServicioTO[] arrTipoServicioTO = (TipoServicioTO[]) listTipoServicioTO
						.toArray(new TipoServicioTO[listTipoServicioTO.size()]);

				bitacoraServicioTO2 = new BitacoraServicioTO(idOperacion,
						fechaEntrada, horaEntrada, tiempo, fechaCaptura,
						horaCaptura, fechaAsignacion, horaAsignacion,
						fechaCubierto, horaCubierto, observaciones, telefono,
						factura, costoEstimado, arrTelefonistaTO,
						arrOperadoraTO, arrFormaPagoTO, arrClienteTO,
						arrDireccionDestinoTO, arrClienteDireccionTO,
						arrStatusTO, arrBitacoraChoferUnidadTO,
						arrTipoServicioTO);

				bitacoraServicioTO.add(bitacoraServicioTO2);
			}
			ps.close();
			conexion.close();
			return bitacoraServicioTO;

		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}
